package database;

import java.util.ArrayList;
import java.sql.*;
import app.*;

public class PropiedadDAO {
  
  private Statement st;
  
  public PropiedadDAO(Connection con) throws SQLException {
    st = con.createStatement();
  }
 
  public boolean insertar(Propiedad prop){
    try {
      ResultSet rs;
      rs = st.executeQuery("select max(id) from propiedad");
      if (rs.next())
        prop.setId(rs.getInt(1) + 1);
      else
        prop.setId(0);
      st.executeUpdate("INSERT INTO Propiedad VALUES  ('"+prop.getId()+"', "+
                                                      "'"+prop.getUsuario()+"', "+
                                                      "'"+prop.getTipo()+"', "+
                                                      "'"+prop.getDimension()+"', "+
                                                      "'"+prop.getDireccion()+"', "+
                                                      "'"+prop.getPrecio()+"', "+
                                                      "'"+prop.getValidado()+"', "+
                                                      "'"+prop.getOferta()+"')");
    } catch (SQLException e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }

  
  public boolean eliminar(Propiedad prop){      
    try {
            st.executeUpdate(       "DELETE "+
            "FROM Propiedad "+
            "WHERE id='"+prop.getId()+"' AND usuario='"+prop.getUsuario()+"'");
    }
    catch (SQLException e){
            e.printStackTrace();
            return false;
    }
    return true;
  }

  public boolean actualizar(Propiedad prop){
    // Por ahora vale asi xD
    return (eliminar(prop) && insertar(prop));
  }
 
  public ArrayList<Propiedad> listar (ArrayList<String> criterio)
  {
              ArrayList<Propiedad> propiedades = new ArrayList<Propiedad> ();
              
              StringBuffer strb = new StringBuffer();
              int i = 0;
              
              if (criterio.size () != 0)
                      strb.append("WHERE ");
              
      while (i != criterio.size ())
      {
              if (criterio.get(i) == "Dimension maxima")
              {       
                      strb.append("dimension<" + criterio.get(i + 1));
                      i += 2;
              }
              else if (criterio.get(i) == "Dimension entre")
              {
                      strb.append("dimension BETWEEN " + criterio.get(i + 1) + " AND " + criterio.get(i + 2));
                      i += 3;
              }
              else if (criterio.get(i) == "Dimension minima")
              {
                      strb.append("dimension>" + criterio.get(i + 1));
                      i += 2;
              }
              else if (criterio.get(i) == "Precio maximo")
              {
                      strb.append("precio<" + criterio.get(i + 1));
                      i += 2;
              }
              else if (criterio.get(i) == "Precio entre")
              {
                      strb.append("precio BETWEEN " + criterio.get(i + 1) + " AND " + criterio.get(i + 2));
                      i += 3;
              }
              else if (criterio.get(i) == "Precio minimo")
              {
                      strb.append("precio>" + criterio.get(i + 1));
                      i += 2;
              }
              else if (criterio.get(i) == "Tipo inmueble")
              {
                      strb.append("tipo=" + criterio.get(i + 1));
                      i += 2;
              }
              else if (criterio.get (i) == "Tipo oferta")
              {
                  strb.append("tipo_oferta='" + criterio.get(i + 1) + "'");
                  i += 2;
              }
			  else if (criterio.get(i) == "Usuario")
			  {
			  	  strb.append("usuario='" + criterio.get(i + 1) + "'");
			  	  i += 2;
			  }
			  else if (criterio.get(i) == "id")
			  {
				  strb.append("id=" + criterio.get(i + 1));
				  i += 2;
			  }
              		
              
              if (i != criterio.size ())
                      strb.append(" AND ");
      }
              
      String criterioBusqueda = new String (strb);
      ResultSet rs;
          
      try {
          rs = st.executeQuery ("SELECT * " +
                                "FROM propiedad " +
                                criterioBusqueda);

          while (rs.next ())
              {
                  Propiedad prop = new Propiedad ();
      
                  prop.setId (rs.getInt ("id"));
                  prop.setTipo (rs.getInt ("tipo"));
                  prop.setDimension (rs.getDouble ("dimension"));
                  prop.setDireccion (rs.getString ("direccion"));
                  prop.setPrecio (rs.getDouble ("precio"));
                  prop.setUsuario (rs.getString ("usuario"));
                  prop.setValidado (rs.getBoolean ("validado"));
                  prop.setOferta (rs.getString ("tipo_oferta"));
      
                  propiedades.add (prop);
              }
      
              return propiedades;
      } catch (SQLException e) {
          e.printStackTrace ();
          return null;
      }
  }
}

